package com.yonyou.cyxdms.basedata.service.repository.product;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yonyou.cyx.framework.dao.base.SuperMapper;
import com.yonyou.cyxdms.basedata.client.domains.vo.VehicleInfoVO;
import com.yonyou.cyxdms.basedata.client.domains.vo.VsMasterInfoVO;
import com.yonyou.cyxdms.basedata.client.dto.product.TtVsPlanTemplateDTO;
import com.yonyou.cyxdms.basedata.client.dto.wholesales.PlanTemplateDTO;
import com.yonyou.cyxdms.basedata.service.dto.DirectivePriceDTO;
import com.yonyou.cyxdms.basedata.service.dto.VsProductDTO;
import com.yonyou.cyxdms.basedata.service.dto.dmsFeign.SaveOrUpdateProductDTO;
import com.yonyou.cyxdms.basedata.service.dto.outapi.CmsApp04;
import com.yonyou.cyxdms.basedata.service.dto.outapi.CmsApp04Data;
import com.yonyou.cyxdms.basedata.service.dto.outapi.CmsApp04QueryDto;
import com.yonyou.cyxdms.basedata.service.dto.vehiclemodel.ProductQueryDTO;
import com.yonyou.cyxdms.basedata.service.entity.product.VsProductPO;
import com.yonyou.cyxdms.basedata.service.vo.*;
import com.yonyou.cyxdms.basedata.service.vo.productinfo.*;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 定义车辆产品，一个车辆产品表示一类车辆，车辆产品定义即可以由车厂下发，也可以自定义 Mapper 接口
 * </p>
 *
 * @author renwd
 * @since 2019-01-18
 */
public interface VsProductMapper extends SuperMapper<VsProductPO> {

    /**
     * 根据公告号从产品中获取最新国补金额
     *
     * @author lyz
     * @date 2021/4/16
     */
    BigDecimal getSubsidyAmount(@Param("noticeNo") String noticeNo);

    /**
     * 根据五级车型查询销售指导价
     *
     * @param directivePriceDTO
     * @return com.yonyou.cyxdms.basedata.service.entity.product.SalesGuidancePriceVO
     * @author renwd
     * @since 2019/1/18
     */
    SalesGuidancePriceVO selectDirectivePrice(DirectivePriceDTO directivePriceDTO);

    /**
     * 根据productId查询销售指导价
     *
     * @author ysj
     * @date 2019/09/16
     * @param ownerCode
     * @param productId
     * @return
     */
    SalesGuidancePriceVO selectDirectivePriceByProductId(@Param("ownerCode") String ownerCode,@Param("appId") String appId, @Param("productId") Long productId);

// ---------------------------- 以下是车营销新增

    /**
     * 根据车系ID获取车型列表
     *
     * @author dengqiang
     * @since 2019/1/2
     */
    public List<CarparamVO> queryCarparamList(@Param("carserialId") Long carserialId);

    /**
     * 根据车系ID获取所有车型ID列表
     *
     * @author dengqiang
     * @since 2019/1/3s
     */
    public List<Long> queryCarparamIdS(@Param("carserialId") Long carserialId);

    /**
     * 获取车型信息
     * queryCarparamList
     *
     * @param map
     * @return
     * @author Zhangsx
     * @date 2018年9月11日
     */
    public CarBaseInfoVO findCarInfo(Map<String, Object> map);

    /**
     * 查询品牌车系车型配置信息
     *
     * @param map
     * @return java.util.Map<java.lang.String                               ,                               java.lang.Object>
     * @author renwd
     * @since 2018/11/26
     */
    public Map<String, Object> queryModelByCondition(Map<String, Object> map);

    /**
     * 根据车系id获取车系
     *
     * @author dengqiang
     * @since 2019/1/21
     */
    public List<CarparamInVO> queryCarparamInfo(@Param("carserialId") Long carserialId, @Param("appId") String appId);

    /**
     * 查询品牌ID,车系ID查询
     *
     * @param
     * @return java.util.Map<java.lang.String                               ,                               java.lang.Object>
     * @author renwd
     * @since 2018/11/26
     */
    public List<CarparamInfoVO> queryCarparam(@Param("brandId") Long brandId, @Param("carserialId") Long carserialId);

    /**
     * 查询整车产品信息
     *
     * @param page
     * @param queryParam
     * @return java.util.List<com.yonyou.cyxdms.basedata.service.vo.productinfo.VsProductVO>
     * @author renwd
     * @since 2019/7/17
     */
    List<VsProductVO> queryProductInfo(IPage page, @Param("params") Map<String, Object> queryParam);

    /**
     * 查询整车产品信息
     *
     * @param page
     * @param queryParam
     * @return java.util.List<com.yonyou.cyxdms.basedata.service.vo.productinfo.VsProductVO>
     * @author zys
     * @since 2020/2/12
     */
    List<VsProductVO> queryProductInfoV2(IPage page, @Param("params") Map<String, Object> queryParam);

    /**
     * 查询Dcs整车产品信息
     *
     * @param page
     * @param queryParam
     * @return java.util.List<com.yonyou.cyxdms.basedata.service.vo.productinfo.VsProductVO>
     * @author renwd
     * @since 2019/7/17
     */
    List<DcsVsProductVO> queryDcsProductInfo(IPage page, @Param("params") Map<String, Object> queryParam);

    /**
     * 查询Dcs整车产品信息
     *
     * @param page
     * @param queryParam
     * @return java.util.List<com.yonyou.cyxdms.basedata.service.vo.productinfo.VsProductVO>
     * @author zys
     * @since 2020/2/11
     */
    List<DcsVsProductVO> queryDcsProductInfoV2(IPage page, @Param("params") Map<String, Object> queryParam);

    /**
     * 导出整车产品
     *
     * @param queryParam
     * @return java.util.List<java.util.Map>
     * @author renwd
     * @since 2019/7/18
     */
    List<Map> queryProductInfoForExport(@Param("params") Map<String, Object> queryParam);

    /**
     * 导出整车产品
     *
     * @param queryParam
     * @return java.util.List<java.util.Map>
     * @author zys
     * @since 2020/2/11
     */
    List<Map> queryProductInfoForExportV2(@Param("params") Map<String, Object> queryParam);

    void updateOemDirectivePriceByProductCode(@Param("productCode") String productCode, @Param("oemDirectivePrice") BigDecimal oemDirectivePrice);

    void updateOemDirectivePriceByProductCodeOil1(@Param("optionCode") String optionCode, @Param("oemDirectivePrice") BigDecimal oemDirectivePrice);

    void updateOemDirectivePriceByProductCodeOil2(@Param("optionCode") String optionCode, @Param("oemDirectivePrice") BigDecimal oemDirectivePrice);
    /**
     * dcs主数据查询
     *
     * @param queryParam
     * @return java.util.List<com.yonyou.cyxdms.basedata.service.vo.productinfo.VsProductVO>
     * @author renwd
     * @since 2019/7/19
     */
    List<VsProductVO> vehicleMasterInfo(Page page, @Param("params") Map<String, Object> queryParam);

    /**
     * 价格更新到整车产品表中
     *
     * @param directivePrice 销售指导价
     * @param productCode 产品代码
     * @param ownerCode 经销商代码
     * @return void
     * @author renwd
     * @since 2019/7/23
     */
    void updateProductInfo(@Param("directivePrice") Double directivePrice, @Param("productCode") String productCode, @Param("ownerCode") String ownerCode);

    /**
     * 根据id查询车辆主数据
     *
     * @param queryParam
     * @return com.yonyou.cyxdms.basedata.service.vo.productinfo.VsMasterInfoVO
     * @author renwd
     * @since 2019/7/24
     */
    VsMasterInfoVO queryProductInfoById(@Param("params") Map<String, Object> queryParam);

    /**
     * TCC获取车辆主数据
     * sql中不包括APPID和OWNERCODE的查询条件
     *
     * @author ysj
     * @date 2019/11/19
     * @param queryParam
     * @return
     */
    VsMasterInfoVO queryTccProductInfoById(@Param("params") Map<String, Object> queryParam);

    /**
     * 获取品牌车型车系数据
     *
     * @author ysj
     * @date 2019/09/10
     * @return
     */
    List<ProductDataVO> getProductData(@Param("appId") String appId, @Param("groupCode") String groupCode, @Param("ownerCode") String ownerCode);

    /**
     * 获取品牌车型车系数据(包括选装)
     *
     * @author zy
     * @date 2020/02/10
     * @return
     */

    List<ProductDataVO> getProductDataNew(@Param("appId") String appId, @Param("groupCode") String groupCode, @Param("ownerCode") String ownerCode);

    /**
     * 根据名称查询车辆主数据ID信息
     *
     * @author ysj
     * @date 2019/10/21
     * @param queryParam
     * @return
     */
    VehicleInfoVO getVehicleInfoByName(@Param("params") Map<String, Object> queryParam);

    List<PlanTemplateDTO> getPlanTemplates(@Param("productCodes") List<String> productCodes);

    List queryVehicleProductInfo(Page page,@Param("params") Map<String, Object> queryParam);

    List queryVehicleProductPriceInfo(Page page,@Param("params") Map<String, Object> queryParam);

    List<ProductInfosVO> queryExport(Page<ProductInfosVO> page,@Param("params") Map<String, Object> queryParam);

    List queryVehicleProductInfoDealer(Page page,@Param("params") Map<String, Object> queryParam);

    /**
     * 查询整车编码信息
     *
     * @param queryParam
     * @return java.util.List
     * @author caozx
     * @since 2020/12/14
     */
    List queryVehicleProductInfo(@Param("params") Map<String, Object> queryParam);

    /**
     * 整车编码信息导出
     *
     * @return void
     * @author caozx
     * @since 2020/12/17
     */
    List<ProductInfosVO> queryProductExport(@Param("params") Map<String, Object> queryParam);

    List<CmsApp04Data> searchCmsApp04Data(@Param("params")CmsApp04QueryDto cmsApp04QueryDto);

    /**
     * 导入更新市场指导价与是否可订购
     *
     * @param productCode
     * @return void
     * @author caozx
     * @since 2021/01/21
     */
    void updateProductOrder( @Param("productCode") String productCode, @Param("oemDirectivePrice") Double oemDirectivePrice, @Param("orderStatus") Integer orderStatus);

    /**
     * 新能源SAP-更新销售指导价
     *
     * @param directivePrice, productCode
     * @return void
     * @author caozx
     * @since 2021/01/21
     */
    void updateProductPirce(@Param("oemDirectivePrice") Double directivePrice, @Param("productCode") String productCode);

    /**
     * 股份SAP-更新销售指导价
     *
     * @param directivePrice, materialCode
     * @return void
     * @author caozx
     * @since 2021/02/05
     */
    void updateProductSharesPirce(@Param("oemDirectivePrice") Double directivePrice, @Param("materialCode") String materialCode);

    /**
     * 股份SAP-批量更新销售指导价
     *
     * @param
     * @return java.lang.Integer
     * @author caozx
     * @since 2021/02/07
     */
    void batchUpdateProductSharesPirce();

    /**
     * 新能源SAP-批量更新销售指导价
     *
     * @author lyz
     * @date 2021/4/16
     */
    void batchUpdateProductPirce();

    /**
     * 新能源SAP-更新国补金额
     *
     * @param subsidiesPrice, noticeNo
     * @return void
     * @author caozx
     * @since 2021/01/21
     */
    void updateProductSubsidies(@Param("subsidyAmount") String subsidiesPrice, @Param("noticeNo") String noticeNo);

    VsProductDlrVO getProductNew(String productCode);

    IPage<TtVsPlanTemplateDTO> queryCarListSideC(@Param("page") Page<TtVsPlanTemplateDTO> page, @Param("dto") TtVsPlanTemplateDTO dto);

    List<TtVsPlanTemplateDTO> queryPlan1DetailProductInfo(@Param("dtos") List<String> dtos);

    //查询接口下发车辆主数据
    List<SaveOrUpdateProductDTO> selectVehicleProductInfo(@Param("params") Map<String, String> queryParam);

    List<VsProductInfoExcelVO> excelOem(@Param("params") Map<String, Object> queryParam);

    List<VsProductPriceInfoExcelVO> excelPriceOem(@Param("params")Map<String, Object> queryParam);

    List<VsProductExcelTemplateVO> excelOemOn();

    VsProductPO selectByProductCode(@Param("productCode") String productCode);

    void sapInsertInterface(@Param("vo") TiProductPriceDataVO vo);

    void updateProductPrice(@Param("dto") VsProductDTO dto);

    List<TiProductPriceDataVO> queryProductPriceLog(@Param("type") Integer type);

    void updateProductPriceLog(@Param("vo") TiProductPriceDataVO vo);
}
